Semiconductor integrated circuits or “chips” are designed to perform a wide variety of functions in electronic systems, as well as to enable those systems to perform their functions both effectively and efficiently. In fact, it is no secret that these chips are ubiquitous in the modern electronic systems and devices with which people interact on a daily basis. The chips are based on highly complex device technologies, circuit designs, system architectures and implementations, and are integral to the electronic systems. These chips implement system functions such as communications, processing, and networking, and they perform critical functions including computation, storage, and control. The chips are found in the electronic systems that have applications in fields such as business, entertainment, and consumer electronics. These electronic systems routinely contain more than one chip. The chips support the electronic systems by computing algorithms and heuristics, handling and processing data, communicating internally and externally to the electronic system, and so on. Since there are so many functions and computations that must be performed, any improvements in the efficiency of the chip operations have a significant and substantial impact on overall system performance. As the amount of data to be handled by the chips increases, the approaches that are used must not only be effective, efficient, and economical, but must also scale reasonably.
Semiconductor devices are vastly complex structures. Various semiconductors, including application specific integrated circuits (ASICs), are designed with a certain purpose in mind. One downside of the specific design parameters of an ASIC is that the circuit can no longer be altered after it leaves the production line. For this reason, ASIC designers need to be sure of their design, especially when producing large quantities of the same ASIC. In contrast, a programmable logic device such as a field programmable gate array (FPGA) is also a type of semiconductor, but does not have specific programming built into the design during production. Programmable logic devices often can be reprogrammed while remaining in their environment of use (e.g. while mounted on the circuit board within which the device is intended to function). Programmable logic devices typically include logic blocks (e.g. programmable Boolean logic gates) and can also include programmable memory blocks, programmable clocking blocks, and other specialized programmable blocks such as multiplier blocks and I/O ports.
Typically, programmable logic devices are programmed using a programming language to implement specific, desired logic in the programmable logic devices. The programmable logic devices can be programmed by writing data to storage on the programmable logic devices. A programmable logic device architecture includes a programmable routing structure and an array of configurable logic blocks. The programmable routing matrix includes an ability to connect configurable logic blocks to each other.
Programmable logic devices allow adaptability to meet future (unforeseen) changes in functional requirements. In some cases, programmable logic devices are used as prototypes for ASIC or other devices. Using a programmable logic device to prototype an ASIC for verification and initial software development is a useful way to both decrease development time and reduce the risk of first silicon failure for the ASIC. Programmable logic devices function well in many applications such as digital video, graphics processing, communications, encryption, medical equipment, mobile computing, and instrumentation—areas all of which are continuing to play an important role in the implementation of many new programmable logic designs.